package demo.Thread;

/**
 * @Auther: hjy(lc))
 * @Date: 2022/8/9-08-09-9:19
 * @Description：demo.Thread             线程
 */
/*
线程：
    是进程中的一个代码执行单元，负责当前进程中代码程序的执行，一个进程中有一个或多个线程
    共享进程资源、线程通信方便
进程：
    代表了内存中正在运行的应用程序，计算机的资源（CPU、内存、硬盘）会按需分配给每个进程，
    jconcle查看java进程
并发：
    在同一个时间段内，两个或多个线程，使用同一个CPU，进行交替运行
并行：
    在同一时刻，两个或多个线程，各自使用一个CPU，同时进行运行
时间片：
    当前一个线程要使用CPU的时候，CPU会分配给这个线程一小段时间（毫秒级别），这段时间即为时间片
    没有时间片为让渡线程
调度方式：
    平均分配（时间片轮转）
    抢占式调度：（JVM）
 */
    /*
    线程占用资源：
        栈： 独有  每个线程都有一个栈
            局部变量
        堆： 共享  每个线程共享该区域
            成员变量
     */
public class thread_use {
    public static void main(String[] args) throws InterruptedException {     //main线程（单线程）

        /*
        Thread.currentThread方法 获取当前正在执行的线程信息，getName()获取当前线程的名称
         */
        //第一个线程
        Thread thread1 = new Thread(){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());          //Thread-0
                for (int j = 10; j < 30; j++) {
                    System.out.println(j + "*************************");
                }
            }
        };
        //第二个线程     两个线程抢占资源，交替执行
        Thread thread2 = new Thread(){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());     //Thread-1
                for (int i = 0; i < 20; i++) {

                    System.out.println(i + "-----------------------");
                }
            }
        };
        //启动线程
        thread1.start();
        System.out.println(Thread.currentThread().getName());     //main     （main线程创建其他线程）
        //Thread.sleep(3000);
        thread2.start();
        System.out.println(Thread.currentThread().getName());     //main
        for (int i = 0; i < 10; i++) {
            System.out.println(i + "########################main");
        }
    }
}

class Student{
    String name;
}
